import Vue from 'vue'
import store from '@/store'

/**
 * Action 权限指令
 * 指令用法：
 *  - 在需要控制 action 级别权限的组件上使用 v-action:[method] , 如下：
 *    <i-button v-action:add >添加用户</a-button>
 *    <a-button v-action:delete>删除用户</a-button>
 *    <a v-action:edit @click="edit(record)">修改</a>
 *
 *  - 当前用户没有权限时，组件上使用了该指令则会被隐藏
 *  - 当后台权限跟 pro 提供的模式不同时，只需要针对这里的权限过滤进行修改即可
 *
 *  @see https://github.com/vueComponent/ant-design-vue-pro/pull/53
 */

const action = Vue.directive('action', {
  inserted: function (el, binding, vnode) {
    // 权限操作名称
    const actionName = binding.arg;
    const moduleName = binding.value;
    // 当前用户角色及权限
    const roles = store.getters.userRoles;
    const userInfo = store.getters.userInfo;
    if (actionName == 'edit' && moduleName.role == 'user' ) {
      if (moduleName.id == userInfo.id) {

      } else {
        if (roles.permissionList.includes(moduleName.role)) {

        } else {
          if (!roles.permissionList.includes(`${moduleName.role}.${actionName}`)) {
            el.style.display = 'none'
          }
        }
      }
    } else {
      if (roles.permissionList.includes(moduleName) || roles.permissionList.includes(moduleName.split('.')[0])) {

      } else {
        if (!roles.permissionList.includes(`${moduleName}.${actionName}`)) {
          el.style.display = 'none'
        }
      }
    }
  }
})


// const action = Vue.directive('action', {
//   inserted: function (el, binding, vnode) {
//     const actionName = binding.arg
//     const roles = store.getters.roles
//     const elVal = vnode.context.$route.meta.permission
//     const permissionId = elVal instanceof String && [elVal] || elVal
//     roles.permissions.forEach(p => {
//       if (!permissionId.includes(p.permissionId)) {
//         return
//       }
//       if (p.actionList && !p.actionList.includes(actionName)) {
//         el.parentNode && el.parentNode.removeChild(el) || (el.style.display = 'none')
//       }
//     })
//   }
// })

export default action
